package src.zhuzi.spring.aop;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 定义被它所注解的注解保留多久
 * SOURCE被编译器忽略
 * CLASS注解将会被保留在Class文件中，在加载到JVM虚拟机时丢弃。这是默认行为，所有没有用Retention注解的注解，都会采用这种策略
 * RUNTIME保留至运行时。所以我们可以通过反射去获取注解信息
 * @author zhuzi
 */
@Retention(RetentionPolicy.RUNTIME)
/**
 * 用来说明该注解可以被声明在哪些元素之前
 * ElementType.TYPE：说明该注解只能被声明在一个类前。
 * ElementType.FIELD：说明该注解只能被声明在一个类的字段前。
 * ElementType.METHOD：说明该注解只能被声明在一个类的方法前。
 * ElementType.PARAMETER：说明该注解只能被声明在一个方法参数前。
 * ElementType.CONSTRUCTOR：说明该注解只能声明在一个类的构造方法前。
 * ElementType.LOCAL_VARIABLE：说明该注解只能声明在一个局部变量前。
 * ElementType.ANNOTATION_TYPE：说明该注解只能声明在一个注解类型前。
 * ElementType.PACKAGE：说明该注解只能声明在一个包名前。
 * @author zhuzi
 */
@Target(ElementType.METHOD)
public @interface PerformCheck {

}